package com.example.mykotlinapp.test


/**
 *给定一个非负整数，你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :

输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :

输入: 9973
输出: 9973
解释: 不需要交换。
注意:

给定数字的范围是 [0, 108]

 *
 * @author zhudeshuai
 * @since 2019/8/12
 */

fun maximumSwap(num: Int): Int {
    val charArray = num.toString().toCharArray()
    val intArray = charArray.map {
        it.toString().toIntOrNull() ?: 0
    }.toMutableList()
    loop@ for (i in 0 until intArray.size) {
        var maxIndex = i
        var max = intArray[i]
        for (j in i + 1 until intArray.size) {
            if (intArray[j] >= max) {
                max = intArray[j]
                maxIndex = j
            }

        }
        if (maxIndex != i && max != intArray[i]) {
            //交换
            val tmp = intArray[i]
            intArray[i] = intArray[maxIndex]
            intArray[maxIndex] = tmp
            break@loop
        }
    }
    var result = 0
    for (i in intArray.size - 1 downTo 0) {
        result += (intArray[i] * Math.pow(10.toDouble(), (intArray.size - 1 - i).toDouble())).toInt()
    }
    return result
}

fun main() {
    println(maximumSwap(98368))
}